---
name: CI

on:
  push:
    branches: [main]
  pull_request:
    paths:
      - ".github/actions/poetry_setup/action.yml"
      - ".github/workflows/_lint.yml"
      - "backend/**"
  workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI

# If another push to the same PR or branch happens while this workflow is still running,
# cancel the earlier run in favor of the next run.
#
# There's no point in testing an outdated version of the code. GitHub only allows
# a limited number of job runners to be active at the same time, so it's better to cancel
# pointless jobs early so that more useful jobs can run sooner.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  POETRY_VERSION: "1.5.1"
  WORKDIR: "./backend"

jobs:
  lint:
    uses: ./.github/workflows/_lint.yml
    with:
      working-directory: "./backend"
    secrets: inherit

  test:
    timeout-minutes: 5
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ${{ env.WORKDIR }}
    strategy:
      matrix:
        python-version:
          - "3.9"
          - "3.10"
          - "3.11"
    name: Python ${{ matrix.python-version }} tests
    services:
      # Label used to access the service container
      redis:
        image: redislabs/redisearch:latest
        # Set health checks to wait until redis has started
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - "6379:6379"
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }}
        uses: "./.github/actions/poetry_setup"
        with:
          python-version: ${{ matrix.python-version }}
          poetry-version: ${{ env.POETRY_VERSION }}
          working-directory: .
          cache-key: langserve-all
      - name: install redis
        run: |
          pip install redis
      - name: check redis is running
        run: |
          python -c "import redis; redis.Redis(host='localhost', port=6379).ping()"

#      - name: Install dependencies
#        shell: bash
#        run: |
#          echo "Running tests, installing dependencies with poetry..."
#          poetry install --with test,lint
#
#      - name: Run tests
#        run: make test
#        env:
#          # Adding a DB number to match unit tests
#          # Unit tests use DB 3, so user doesn't accidentally wipe their data
#          # if they run the tests against a real redis instance.
#          # Need to follow up and swap out default port numbers and add `test`
#          # password
#          REDIS_URL: "redis://redis:6379/0"
#      - name: Ensure the tests did not create any additional files
#        shell: bash
#        run: |
#          set -eu
#
#          STATUS="$(git status)"
#          echo "$STATUS"
#
#          # grep will exit non-zero if the target message isn't found,
#          # and `set -e` above will cause the step to fail.
#          echo "$STATUS" | grep 'nothing to commit, working tree clean'
